package co.chonghao.ch_kuaichong_user.base;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.WindowManager;
import android.widget.EditText;

import java.util.List;

import co.chonghao.ch_kuaichong_user.utils.NetworkUtil;


/**
 * 从activity抽取出公共的方法
 */
public abstract class BaseActivity extends AppCompatActivity {
    public abstract void setView();//初始化布局

    public abstract void init();//初始化数据

    protected Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        //状态栏 @ 顶部
//        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//        //导航栏 @ 底部
//        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        context = this;
        setView();
        init();
        Log.i("BaseActivity", getClass().getSimpleName());
//        ImmersionBar.with(this)
//                .statusBarDarkFont(true, 0.2f)
//                .init();
    }


    /**
     * 设置窗口全屏
     */
    public void setWindowFullScreen() {
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    /**
     * @param cls 启动一个activity的公共方法
     */
    public void launch(Class<?> cls) {
        Intent intent = new Intent(this, cls);
        startActivity(intent);
    }

    /**
     * @param cls
     * @param bundle 携带一个bundle对象启动意图
     */
    public void launch(Class<?> cls, Bundle bundle) {
        Intent intent = new Intent(this, cls);
        intent.putExtras(bundle);
        startActivity(intent);
    }

    /**
     * @param cls
     * @param code 启动一个意图然后进行结果回传
     */
    public void launchForResult(Class<?> cls, int code) {
        Intent intent = new Intent(this, cls);
        startActivityForResult(intent, code);
    }

    /**
     * @param cls
     * @param code
     * @param bundle 启动一个意图并且携带bundle对象然后回传
     */
    public void launchForResult(Class<?> cls, int code, Bundle bundle) {
        Intent intent = new Intent(this, cls);
        intent.putExtras(bundle);
        startActivityForResult(intent, code);
    }

    /**
     * @param cls
     * @param value 携带一个字符串启动意图
     */
    public void launch(Class<?> cls, String value) {
        Intent intent = new Intent(this, cls);
        intent.putExtra("key", value);
        startActivity(intent);
    }

    /**
     * @param cls
     * @param key
     * @param value 携带一个字符串启动意图
     */
    public void launch(Class<?> cls, String key, String value) {
        Intent intent = new Intent(this, cls);
        intent.putExtra(key, value);
        startActivity(intent);
    }

    /**
     * 是否打开网络
     **/
    public boolean isNetwork() {
        return NetworkUtil.isConn(this);
    }


    /**
     * 输入框隐藏软键盘
     */
    public void hide(EditText edt) {
        getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }

    public void initSystemBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 透明状态栏
            this.getWindow().addFlags(
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 透明导航栏
            // acvitity.getWindow().addFlags(
            // WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
    }

    /**
     * 初始化
     * <p>According to your needs,you could add the methods of initTitle(),initView(),
     * initParam(),initSetup(),initData(what)</p>
     **/
    public void initialize() {
    }

    /**
     * 对控件或者类进行初始化变量（例如findviewbyid,new一个适配器之类的）
     **/
    public void initParam() {
    }

    /**
     * 对控件初始化，例如设置背景，是否可见等属性
     **/
    public void initSetup() {
    }

    /**
     * 从接口获取数据
     **/
    public void getDataFromWeb() {
    }

    /**
     * 初始化标题栏
     */
    public void initTitle() {
    }


    @Override
    public void onBackPressed() {
        finish();
    }

    /**
     * activity中搭载了多个fragment，需要显示某个fragment时使用,
     * <br><B>注：同时加载多个Fragment，但只显示一个Fragment时才使用</B>
     *
     * @param fragmentList fragment的集合
     * @param add2LayoutId 此fragment要添加到的布局，布局的ID
     * @param position     此fragment在集合中的下标
     */
    public void addFragmentStack(List<? extends Fragment> fragmentList, int add2LayoutId, int position) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        Fragment fragment = fragmentList.get(position);
        if (!fragment.isAdded()) {
            ft.add(add2LayoutId, fragment);
        }
        for (int i = 0; i < fragmentList.size(); i++) {
            if (i == position) {
                ft.show(fragmentList.get(i));
            } else {
                ft.hide(fragmentList.get(i));
            }
        }
        ft.commit();
    }

    /**
     * 接口返回数据解析方法
     */
//    public <T> T resolveResponse(String response, Class<T> tClass) {
////        dismissProgressDialog();
//        if (TextUtils.isEmpty(response)) {
//            ToastUtil.showToast("网络不给力，请重试");
//            return null;
//        }
//        if (response.contains("\"code\": \"05\"")) {
//            ToastUtil.showToast("登录信息已过期，请重新登录");
//            SpUtils.clearUser(context);
//            App.getInstance().exit();
//            launch(LoginActivity.class);
//        } else {
//            try {
//                Gson gson = new Gson();
//                T result = gson.fromJson(response, tClass);
//                return result;
//            } catch (Exception e) {
//                e.printStackTrace();
//                ToastUtils.showToast(e.toString());
//            }
//        }
//        return null;
//    }



    /*************************** 判断应用是否安装 **********************************/
    /**
     * 微信包名
     */
    public final String TENCENT_WECHAT_PACKAGENAME = "com.tencent.mm";
    /**
     * 支付宝包名
     */
    public final String ALIPAY_PACKAGENAME = "com.eg.android.AlipayGphone";

    /**
     * 判断某应用是否安装
     *
     * @param mContext
     * @param packageName
     * @return
     */
    public boolean isInstallPackage(Context mContext, String packageName) {
        PackageManager pManager = mContext.getPackageManager();
        PackageInfo packageInfo = null;
        try {
            packageInfo = pManager.getPackageInfo(packageName,
                    PackageManager.GET_PERMISSIONS);
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return (packageInfo == null) ? false : true;
    }
}

